From b4f5b27478ed1a82018f28dbd2a696701a286052 Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Fri, 1 Dec 2006 09:28:14 +0000 Subject: [PATCH] [XEN] Fix error paths in p2m insertion code Signed-off-by: Tim Deegan --- xen/arch/x86/mm/shadow/common.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 8bf43133e4..d71704cbd2 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1008,12 +1008,13 @@ shadow_set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) void *table = sh_map_domain_page(table_mfn); unsigned long gfn_remainder = gfn; l1_pgentry_t *p2m_entry; + int rv=0; #if CONFIG_PAGING_LEVELS >= 4 if ( !p2m_next_level(d, &table_mfn, &table, &gfn_remainder, gfn, L4_PAGETABLE_SHIFT - PAGE_SHIFT, L4_PAGETABLE_ENTRIES, PGT_l3_page_table) ) - return 0; + goto out; #endif #if CONFIG_PAGING_LEVELS >= 3 // When using PAE Xen, we only allow 33 bits of pseudo-physical @@ -1027,12 +1028,12 @@ shadow_set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) ? 8 : L3_PAGETABLE_ENTRIES), PGT_l2_page_table) ) - return 0; + goto out; #endif if ( !p2m_next_level(d, &table_mfn, &table, &gfn_remainder, gfn, L2_PAGETABLE_SHIFT - PAGE_SHIFT, L2_PAGETABLE_ENTRIES, PGT_l1_page_table) ) - return 0; + goto out; p2m_entry = p2m_find_entry(table, &gfn_remainder, gfn, 0, L1_PAGETABLE_ENTRIES); @@ -1051,9 +1052,12 @@ shadow_set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) (void)__shadow_validate_guest_entry( d->vcpu[0], table_mfn, p2m_entry, sizeof(*p2m_entry)); + /* Success */ + rv = 1; + + out: sh_unmap_domain_page(table); - - return 1; + return rv; } // Allocate a new p2m table for a domain. -- 2.30.2